﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// 原题连接：https://leetcode.cn/problems/maximum-product-of-three-numbers/
/*
题目描述：
给你一个整型数组 nums ，在数组中找出由三个数组成的最大乘积，并输出这个乘积。

 

示例 1：
输入：nums = [1,2,3]
输出：6

示例 2：
输入：nums = [1,2,3,4]
输出：24

示例 3：
输入：nums = [-1,-2,-3]
输出：-6
 

提示：
3 <= nums.length <= 104
-1000 <= nums[i] <= 1000
*/


// 开始解题：
// 方法1——排序
int cmp_int(const void* p1, const void* p2) {
    assert(p1 && p2);
    return *(int*)p1 - *(int*)p2;
}
int maximumProduct(int* nums, int numsSize) {
    assert(nums);
    // 先对数组进行排序
    qsort(nums, numsSize, sizeof(int), cmp_int);
    return fmax(nums[0] * nums[1] * nums[numsSize - 1], nums[numsSize - 3] * nums[numsSize - 2] * nums[numsSize - 1]);
}